<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>17 数组排序：冒泡排序</title>
</head>

<body>
  <script>
    // 交换位置
    function swap(array, i, j) {
      // let temp = array[j];
      // self[j] = self[i];
      // self[i] = temp;
      [array[j], array[i]] = [array[i], array[j]] // 简写
    }
    Array.prototype.bubble = function bubble() {
      // flag 控制如果是已经排序好的就直接返回（冒泡排序必须有这个优化）
      let self = this, flag = false;
      // 外层循环控制循环多少次
      for (let i = 0; i < self.length - 1; i++) {
        // 内存循环控制每次循环执行一次
        for (let j = 0; j < self.length - 1 - i; j++) {
          if (self[j] > self[j + 1]) {
            swap(self, j, j + 1);
            flag = true;
          }
        }
        if (!flag) break;
        flag = false;
      }
      return self;
    }

    let arr = [10, 3, 32, 2, 9];
    // arr = [1, 2, 3, 4, 5]

    arr.bubble();
    console.log(arr) //=> [2, 3, 9, 10, 32]
  </script>
</body>

</html>